home *** CD-ROM | disk | FTP | other *** search
/ NeXT Education Software Sampler 1992 Fall / NeXT Education Software Sampler 1992 Fall.iso / SoundAndMusic / cmix / Minc / myprint.c < prev    next >
C/C++ Source or Header  |  1991-06-24  |  2KB  |  122 lines

  1.  
  2. #include <stdio.h>
  3. /*
  4.  * file: print.c
  5.  * 
  6.  * This file contains a function that is an internally defined function
  7.  * to print to standard output.
  8.  */
  9.  
  10. main()
  11. {
  12.     char str[500];
  13.     double a[500];
  14.     int n;
  15.     strcpy(str,"printf");
  16.     strcpy ((char *)a,"printf(\"hello world\n\");");
  17.     is_print(str,a,31);
  18. }
  19.  
  20. is_print(str,a,n)
  21. char *str;
  22. double  a[];
  23. int n;
  24. {
  25.     int i;
  26.     char *s;
  27.     char buf[500],*cp,c;
  28.     cp = buf;
  29.  
  30.     if (!strcmp(str,"print")|| !strcmp(str,"printf")) {
  31.  
  32.         i = (int) a[0];
  33.         s = (char *) i;
  34.  
  35.         if (n >40)  {
  36.     fprintf(stderr,"ERROR: exceeded maximum number of args to print\n");
  37.             return(1);
  38.         }
  39.  
  40.         for (i=0;s[i]!='\0';i++)  {
  41. printf("%c\n",s[i]);
  42.             if (i >= 500)  {
  43. fprintf(stderr,"ERROR: exceeded maximum command string length in print\n");
  44.                 return(1);
  45.             }
  46.  
  47.             c = s[i];
  48.  
  49.             switch(c) {
  50.  
  51.             case  '\\':  
  52.                 i++;
  53.                 c = s[i];
  54.                 switch (c) {
  55.  
  56.                 case 'n': 
  57.                     *cp++ = '\n';
  58.                     break;
  59.                 case 't': 
  60.                     *cp++ = '\t';
  61.                     break;
  62.                 case '\\': 
  63.                     *cp++ = '\\';
  64.                     break;
  65.                 case '%': 
  66.                     *cp++ = '%';
  67.                     break;
  68.                 }
  69.  
  70.                 break;
  71.  
  72.             case  '%':  
  73.                 i++;
  74.                 c = s[i];
  75.                 *cp++ = '%';
  76.                 switch (c) {
  77.  
  78.                 case 'f':  
  79.                     *cp++ = 'f';
  80.                     break;
  81.                 case 'd':  
  82.                     *cp++ = 'f';
  83.                     break;
  84.                 case 'l':  
  85.                     *cp++ = 'f';
  86.                     break;
  87.                 case ' ':  
  88.                     *cp++ = 'f';
  89.                     *cp++ = ' ';
  90.                     break;
  91.                 case ',':  
  92.                     *cp++ = 'f';
  93.                     *cp++ = ',';
  94.                     break;
  95.                 }
  96.  
  97.  
  98.                 break;
  99.  
  100.  
  101.  
  102.  
  103.             default:
  104.                 *cp++ = c;
  105.                 break;
  106.             }
  107.         }
  108.  
  109.         *cp++ = '\0';
  110.  
  111.  
  112.         printf(buf,
  113.         a[  1],a[  2],a[  3],a[  4],a[  5],a[  6],a[  7],a[  9],a[ 10],
  114.         a[ 11],a[ 12],a[ 13],a[ 14],a[ 15],a[ 16],a[ 17],a[ 19],a[ 20],
  115.         a[ 21],a[ 22],a[ 23],a[ 24],a[ 25],a[ 26],a[ 27],a[ 29],a[ 30],
  116.         a[ 31],a[ 32],a[ 33],a[ 34],a[ 35],a[ 36],a[ 37],a[ 39],a[ 40]);
  117.         return(1);
  118.     }
  119.     return(0);
  120.  
  121. }
  122.